package com.caregiver.watch.business.care.helper;

import com.caregiver.watch.common.utils.collection.ListUtils;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static com.caregiver.watch.common.constant.NumberConstants.BIG_DECIMAL_TWO_THOUSAND;
import static com.caregiver.watch.common.constant.NumberConstants.FIVE;
import static com.caregiver.watch.common.constant.NumberConstants.TWO;

/**
 * @Description: 心电辅助类
 * @Author 疆戟
 * @Date 2025/10/20 22:56
 * @Version 1.0
 */
@Slf4j
public final class EcgHelper {


    /**
     * 去除基线漂移（移动平均法）
     *
     * @param xList 原始数据列表
     * @param windowSize 窗口大小
     * @return 去漂移后的数据列表
     */
    public static List<BigDecimal> removeBaselineDrift(List<BigDecimal> xList, int windowSize) {
        int n = xList.size();
        List<BigDecimal> yList = new ArrayList<>(n);

        BigDecimal sum = BigDecimal.ZERO;

        for (int i = 0; i < n; i++) {
            sum = sum.add(xList.get(i));

            // 当窗口已满时，减去滑出窗口的值
            if (i >= windowSize) {
                sum = sum.subtract(xList.get(i - windowSize));
            }

            if (i < windowSize - 1) {
                // 前 windowSize 个点还不够窗口长度，输出0
                yList.add(BigDecimal.ZERO);
            } else {
                BigDecimal avg = sum.divide(BigDecimal.valueOf(windowSize), TWO, RoundingMode.HALF_UP);
                BigDecimal y = xList.get(i).subtract(avg);
                yList.add(y);
            }
        }

        return yList;
    }
}
